from hqyj_mqtt import MQTTClient   # 从hqyj_mqtt文件将Mqtt_Clt导入进来
import json   # 导入json模块用来处理mqtt接收数据
import queue

import base64 # 用来进行图片的base64解码
import cv2   # 用来处理图像数据
import numpy as np  # 用来存储图像数据

'''
     每一类型成熟度会有五种水果，共计三类
     每一种水果需要获取20张照片，共计20*5*3=300张
'''


# 创建一个消息队列
msg_queue = queue.Queue()
# 定义回调函数
def custom_on_message(client, userdata, message):
     msg = json.loads(message.payload.decode())  # 将字符串类型转换成键值对
     msg_queue.put(msg)
     # print(msg)  # 输出接收到的内容


# 构造mqtt客户端
mqtt_clint =  MQTTClient('127.0.0.1','bb','aa')

# 连接mqtt客户端
mqtt_clint.connect()

# 注册接收回调函数
mqtt_clint.set_on_message(custom_on_message)

# # 开启传送水果任务线程
# threading.Thread(target=TransferFruit).start()
i = 0
# 实时处理接收任务
while True:
     json_msg =   msg_queue.get()  # 从队列里面获取数据
     if 'image' in json_msg:
          # 将Base64编码的图像数据解码为二进制数据
          image_data = base64.b64decode(json_msg['image'])
          # 将二进制数据转换为numpy数组
          image_array = np.frombuffer(image_data, np.uint8)
          # 将numpy数组转换为OpenCV图像对象
          image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
          cv2.imwrite('./dataset/'+f'img_{i}.jpg',image)
          i += 1
          print(f'图片{i}已保存')


